iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

非本科系也能懂和該懂得作業系統系列 第 21

Day 21 - Memory address binding

  • 分享至 

  • xImage
  •  

當一個Program被執行起來成為Prcoess的時候,會將instruction和資料都存放在記憶體裡面,交由作業系統去管理每一個Process所使用到的記憶體。把記憶體想像成一個線性的空間,像是一條街道一樣,街道旁的門牌指的就是不同的記憶體位置,這些空間全部都是交由作業系統去使用,依照需求去放入Process。

Swap

不論是固態硬碟(SSD)、還是傳統使用磁頭的硬碟(HDD),在相同容量的造價上皆比記憶體便宜不少,因此在作業系統的記憶體管理之中有一個動作叫做swap,把一些Priority比較低、或者在做I/O的Process所使用的記憶體先放到硬碟存著,當該Process要被執行的時候才從硬碟重新被load回記憶體。

並不是整個硬碟可以無限制的拿來當記憶體使用,在安裝作業系統時可以指定一個空間切出來當作swap base,這個空間內的容量才能被拿來存放從記憶體搬過來的資料,與檔案系統分開,所以在電腦上是找不到這一塊空間。

address binding:

決定把Process放在哪一個記憶體位置之上,這個動作就叫做address binding,其中有三個時間會發生address binding,分別是:

  1. compile time:在編譯的時候就決定好記憶體位置。對於常駐的程式可行,但當遇到Process遇到記憶體空間被搬動的情況,重新被搬回來就只能搬到一樣的記憶體位置,那如果記憶體位置已經被佔住了就只能等待,且如果需要重新換一個記憶體位置只能透過重新編譯(recompile)。
  2. load time:在程式啟動成為Process的時候決定好記憶體位置。在compile的時候先不配置記憶體位置,在loading的時候才依照記憶體的空閒空間去配置。比起compile time來說較有彈性,因為程式可能先被compile後過了一段時間才被執行,缺點依然是當需要重新換記憶體位置的時候,需要呼叫loader去重新載入Process。
  3. run time:在程式執行中決定記憶體位置。當在編譯程式的時候,確定的位置並不是記憶體上實際的位置,而是一個相對的logic address(virtual address),當CPU在讀寫這個記憶體位置之前,會先經過一個Memory Manage Unit(MMU)的轉換,把logic address轉換成實際的位置。MMU做的事情也不難,每個Process會有一個Process Control Block儲存一些資訊,在Context switch會去存取裡面的memeory basic address,並且透過這個值來將記憶體位置做一個位移,就能找到實際的記憶體位置。

binding address直接去影響到了swap的成效,

  • 當binding發生在compile/load time:因為記憶體位置已經寫死了,swap回到memory時如果記憶體位置已經被其他Process占用,則需要等待該記憶體位置被釋放(OS 要去保護資料不會被其他Process影響到)。
  • 當binding發生在run time:swap 回來的記憶體位置就能夠是不一樣的位置,在使用上比較合適。

上一篇
Day 20 - Storage
下一篇
Day 22 - logical address v.s. physical address
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言